home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
-
- #define CD_FILE_NAME "cdData"
-
- #define MAX_ARTIST_CHARS 50
- #define MAX_TITLE_CHARS 50
-
- struct CDInfo
- {
- char rating;
- char artist[ MAX_ARTIST_CHARS ];
- char title[ MAX_TITLE_CHARS ];
- struct CDInfo *next;
- };
-
- extern struct CDInfo *gFirstPtr;
-
-
- /******************************** CountCDs ***/
-
- int CountCDs()
- {
- struct CDInfo *infoPtr;
- int numCDs;
-
- infoPtr = gFirstPtr;
- numCDs = 0;
-
- while ( infoPtr != NULL )
- {
- infoPtr = infoPtr->next;
- numCDs++;
- }
-
- return( numCDs );
- }
-
-
- /******************************** FlushFile ***/
-
- void FlushFile( FILE *fp )
- {
- int c;
-
- while ( ( (c = fgetc( fp )) != '\n') && (c != EOF ) )
- ;
- }
-
-
- /******************************** ReadFileLine ***/
-
- void ReadFileLine( FILE *fp, char *line )
- {
- char c;
-
- while ( (c = fgetc( fp )) != '\n' )
- {
- *line = c;
- line++;
- }
-
- *line = 0;
- }
-
-
- /******************************** ReadFile ***/
-
- char ReadFile()
- {
- FILE *fp;
- struct CDInfo *infoPtr;
- int numCDs, num, i;
-
- if ( ( fp = fopen( CD_FILE_NAME, "r" ) ) == NULL )
- return( FALSE );
-
- fscanf( fp, "%d", &numCDs );
- FlushFile( fp );
-
- for ( i=1; i<=numCDs; i++ )
- {
- infoPtr = malloc( sizeof( struct CDInfo ) );
-
- if ( infoPtr == NULL )
- {
- printf( "Out of memory!!! Goodbye!\n" );
- exit( 0 );
- }
-
- ReadFileLine( fp, infoPtr->artist );
- ReadFileLine( fp, infoPtr->title );
- fscanf( fp, "%d", &num );
- infoPtr->rating = num;
- FlushFile( fp );
-
- AddToList( infoPtr );
- }
-
- fclose( fp );
-
- return( TRUE );
- }
-
-
- /******************************** WriteFile ***/
-
- void WriteFile()
- {
- FILE *fp;
- struct CDInfo *infoPtr;
- int numCDs, i, num;
-
- if ( ( fp = fopen( CD_FILE_NAME, "w" ) ) == NULL )
- {
- printf( "***ERROR: Could not write CD file!" );
- }
- else
- {
- numCDs = CountCDs();
-
- fprintf( fp, "%d\n", numCDs );
-
- infoPtr = gFirstPtr;
-
- for ( i=1; i<=numCDs; i++ )
- {
- fprintf( fp, "%s\n", infoPtr->artist );
- fprintf( fp, "%s\n", infoPtr->title );
-
- num = infoPtr->rating;
- fprintf( fp, "%d\n", num );
- infoPtr = infoPtr->next;
- }
-
- fclose( fp );
- }
- }